package com.blumov.fastbox.domain.model.compra;

import java.util.HashSet;
import java.util.Set;

import com.blumov.fastbox.domain.shared.ValueObject;

/**
 * Representacion de una bandeja de un pedido.
 * 
 * @author Bruno Masci
 *
 */
public class Bandeja implements ValueObject<Bandeja> {
	
	private static final long serialVersionUID = 1L;

    // Needed by Hibernate
	@SuppressWarnings("unused")
	private Integer id;
	
	/**
	 * Conjunto de items que forman esta bandeja
	 */
	private Set<ItemPedido> items = new HashSet<ItemPedido>();

	
	Bandeja() {
	    // Needed by Hibernate
	}

	/**
	 * Obtiene el precio de esta bandeja
	 */
	public Double precio() {	
		Double precioAcumulado = new Double(0);
		
		for (ItemPedido itemPedido : this.items) {
			precioAcumulado += itemPedido.precio();
		}
		
		return precioAcumulado;
	}
	
	public void agregarItem(ItemPedido itemPedido) {
		items.add(itemPedido);
	}

	public Integer cantidadDeItems() {
		return this.items.size();
	}
	
	// Getters & setters
	
	public Set<ItemPedido> getItems() {
		return items;
	}

	public void setItems(Set<ItemPedido> items) {
		this.items = items;
	}

	public boolean sameValueAs(Bandeja other) {
		return other != null && items.equals(other.items);
	}
	
	  @Override
	  public boolean equals(final Object o) {
	    if (this == o) return true;
	    if (o == null || getClass() != o.getClass()) return false;

	    final Bandeja bandeja = (Bandeja) o;

	    return sameValueAs(bandeja);
	  }

	  @Override
	  public int hashCode() {
	    return items.hashCode();
	  }
}
